_EFS
(usa Slackware)
Enviado em 30/08/2011 - 10:33h
Bom dia comunidade VOL,
Estou com a seguinte dúvida em arquivo: estou fazendo um programa que faz um cadastro. Esses dados estão em uma struct. Estou usando também uma lista encadeada. Quando vou fazer um cadastro minha main() chama uma função de cadastro e a medida que faço a leitura de um dado, uso um fwrite para imprimir la no arquivo. Até ai tudo bem, mas caso eu faça 100 registros por exemplo e queira alterar o registro 39, essa função de registrar não foi passada a ela como argumento a struct, por isso eu não estou conseguindo usar fseek(); para fazer a busca.
Alguém sabe como posso fazer a busca de uma determinada struct usando fseek, nesta função?
Desde já agradeço a compreenção de todos, segue abaixo o código.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct teste
{
char nome[80];
int num;
struct teste *proximo;
}tteste;
int t(tteste **cabeca);
int w(tteste *cabeca);
int main()
{
tteste a;
tteste *cabeca=NULL;
tteste *noatual;
t(&cabeca);
w(cabeca);
noatual=cabeca;
while(noatual!=NULL)
{
cabeca =noatual->proximo;
free(noatual);
noatual=cabeca;
}
return(0);
}
int t(tteste **cabeca)
{
FILE *p;
tteste *noatual,*novono;
char nome1[80];
int num1;
p=fopen("a.txt","a+");
printf("Nome: ");
fflush(stdin);fgets(nome1,80,stdin);
fwrite(&nome1,sizeof(nome1),1,p);
printf("\nNumero: ");
scanf("%d",&num1);
//fwrite(&num1,sizeof(num1),1,p);//fflush(stdin);
fprintf(p,"%d",num1);
fputs("\n",p);
fclose(p);
if(*cabeca==NULL)
{
*cabeca = (tteste *) malloc(sizeof(tteste));
strcpy((*cabeca)->nome,nome1);
(*cabeca)->num=num1;
(*cabeca)->proximo=NULL;
}
else
{
noatual=*cabeca;
while(noatual->proximo!=NULL)
noatual=noatual->proximo;
novono= (tteste *) malloc(sizeof(tteste));
strcpy(novono->nome,nome1);
novono->num=num1;
novono->proximo=NULL;
noatual->proximo=novono;
}
return(0);
}
int w(tteste *noatual)
{
while(noatual != NULL)
{
printf("Nome: %s Numero: %d",noatual->nome,noatual->num);
noatual=noatual->proximo;
}
return(0);
}